<?php

namespace App\Classes;

use App\Models\Component as ComponentModel;
use App\Models\ComponentType;
use FilesystemIterator;
use RecursiveIteratorIterator;
use RecursiveDirectoryIterator;


class ImportController
{
    public $project_path;

    /**
     * 在project的文件夹里面components的文件夹里面进行遍历文件路径，从文件路径获得一些基本信息，在数据库里面插入基本信息来创建这个组件
     * 从此获取组件的ID，创建vue组件，并创建一个组件类型，如果有子组件的话，组成一个树形结构json, 填到相应的字段里面，这个字段是在组件的模型里面
     * 到这个项目的根目录，进行文件内容替换(对app.vue, vite.config.js进行更改)，执行npm run build, 获取index.html的内容，填到相应的字段里面，
     * 然后把css和js文件复制到public目录的下面的相应的文件夹里面
     *
     * 如果是npm依赖包，那么就在package.json里面获取这个依赖包的名称和版本，插入到相应的字段里面
     *
     * 修改App.vue, 替换@/components/HelloWorld.vue得路径，还有<HelloWorld />
     * 然后在vite.config.js修改test1为组件的名称，执行npm run build这个指令
     * 拷贝文件到public目录下面，具体位置为public/demo/[组件名称], 然后拷贝index.html的内容到compiled_html
     * 这个字段里面，用组件的key找对应的组件的记录
     * 最后app.vue和vite.config.js恢复到原始状态
     *
     */

    public function __construct()
    {
        $this->project_path = 'D:\projects\vue-tailwind3-import\src\components';
        $files = scanAllFiles($this->project_path);

        if(count($files) > 0){

            foreach ($files as $file_path) {

                $components_info = getComponentInfo($file_path);
//                $preview_html = getPreviewHtml($file_path);
                $children_json = getChildrenStructureJson($file_path);
                $children_json = json_encode($children_json);

                $component = ComponentModel::create([
                    'slug' => $components_info['slug'],
                    'title' => $components_info['title'],
                    'chinese_title' => $components_info['title'],
                    'japanese_title' => $components_info['title'],
                    'download_path' => $components_info['relative_path'],
                    'component_tree' => $children_json,
                ]);

                $created_component_id = $component->id;

                $component_type = ComponentType::create([
                    'component_id' => $created_component_id,
                    'framework' => 'vue',
                    'code' => $components_info['code'],
                ]);

            }
        }
    }

}
